package eraikikon;


import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Vector;

public class Gatazkatsuena {

	private Kudeatzailea _kudeatzailea;
	
	public Gatazkatsuena(Kudeatzailea kudeatzailea) {
		_kudeatzailea = kudeatzailea;
		
	}
	
	public void gatazkatsuenak_aurkitu(){
		// TODO: metodo honen ordez, beste bat
		// erabiltzea proposatzen dut: get(zer)
		
		
		// TODO: Erabiltzaile klasea superklase bihurtu
		// Bere azpiklaseak Irakasle, Ikasle, SegAdmin izanik
		
		Vector<Erabiltzaile> irakasleak;
		Vector<SarbideEskaera> sarbide_eskaerak;
		Txartela txartela;
		LinkedList<Laguntzaile> gatazkatsuenak = new LinkedList<Laguntzaile>();
		
		irakasleak = _kudeatzailea.getIrakasleak();
		
		// 2 urte baino gehiago Fakultatean eman duten irakasleak aurkitu

		for(Erabiltzaile irakasle :  irakasleak) {
			txartela = _kudeatzailea.getTxartel2Urte(irakasle);
			if (txartela!=null){
				// azken hilbabete honetan txartel honi dagozkion ezeztatutako sarbide eskaerak lortu 
				sarbide_eskaerak = _kudeatzailea.getSarbideEskaerak(txartela);
				// TODO: dokumentatu Laguntzaile klasearen beharra
				gatazkatsuenak.add(new Laguntzaile(irakasle, txartela, sarbide_eskaerak));
			}
		}

		Collections.sort(gatazkatsuenak); // lortutako hurrenkera txikienetik handienera doa 
		Collections.reverse(gatazkatsuenak); // zerrendaren hurrenkera alderantzikatu
		
		// zerrendako irakasle bakoitzaren identifikatzailea
		// izena, txartel zenbakia eta edukitako sarbide eskaeren
		// ukapenen kopurua erakutsiko da.
		// ID_irakasle, irakasle_izena, Txartel_Znb, UkapenKopurua
		
		Laguntzaile lag = null;
		for(int i=0;i<gatazkatsuenak.size();i++){
			 lag = gatazkatsuenak.get(i);
			 System.out.println("Erab_ID:" + lag.getErabiltzaile().getId() + "\n" + 
					 			"Izena:" + lag.getErabiltzaile().getIzena() + "\n" +  
					 			"TxartelID:" + lag.getTxartela().getId() + "\n" + 
					 			"SarbideEskaerenKopurua:" + lag.getSarbideEskaerenLuzera());
		}
		
		// ======= Gertakaria (intzidentzia) gorde ============  
		// txartelaren identifikatzailea eta gatazka gehien sortu dion
		// txartel irakurgailuaren identifikatzailea gordeko dira
		
		
		TxartelIrakurgailua txartelIrak;
		int id_txartel_irak;
		Vector<Integer> taula = new Vector<Integer>();
		
		// kalkulatu ea zenbat sarbide eskaera ukatuak dituen lehenengo irakasleak
		// **txartel irakurgailu bakoitzeko**
		
		lag = gatazkatsuenak.getFirst();
		
		for(SarbideEskaera sarbide_eskaera : lag.getSarbideEskaerak()){
			txartelIrak = _kudeatzailea.getTxartelIrakurgailua(sarbide_eskaera);
			 id_txartel_irak = txartelIrak.getId();
			 // AutoBoxing
			 if (taula.contains(id_txartel_irak)){
				  taula.set(taula.indexOf(id_txartel_irak),taula.get(taula.indexOf(id_txartel_irak))+1);
			 }else{
				 taula.add(id_txartel_irak);
			 }
		}
		
		Collections.sort(taula);
		
		// TODO: beste metodo batzuk sortu aurreko metodoa banatzeko
		// oso luzea baita
		
		_kudeatzailea.createGertakaria(lag.getTxartela().getId(),taula.firstElement(),"IrakasleGatazkatsuena");
	}
	

}
